package com.zhouheng.mongodb.service;

import com.zhouheng.mongodb.entity.BaseSiteInfo;
import com.zhouheng.mongodb.entity.ForecastScoreDetail;
import com.zhouheng.mongodb.entity.GridData;

import java.util.List;

/**
 * mongo template服务
 *
 * @author 周恒
 * @date 20200421 10:33:22
 * @since v1.0
 */
public interface MongoTemplateService {

    /**
     * 简单查询
     *
     * @return 返回 list 描述此返回参数
     * @author 周恒
     * @date 20200421 10:34:29
     * @since v1.0
     */
    List<BaseSiteInfo> query();

    /**
     * 聚合查询，分组求平均值，并聚合中条件判断
     *
     * @return 返回 list 描述此返回参数
     * @author 周恒
     * @date 20200421 10:55:09
     * @since v1.0
     */
    List<ForecastScoreDetail> aggregationAvg();

    /**
     * 聚合查询分组求总条数
     *
     * @return 返回 intelligence query dto 描述此返回参数
     * @author 周恒
     * @date 20200421 11:02:50
     * @since v1.0
     */
    long aggregationCount();

    /**
     * 分页聚合查询，排序
     *
     * @return 返回 list 描述此返回参数
     * @author 周恒
     * @date 20200421 11:27:45
     * @since v1.0
     */
    List<ForecastScoreDetail> aggregationQueryPage();

    /**
     * 删除操作
     *
     * @author 周恒
     * @date 20200421 11:16:28
     * @since v1.0
     */
    void remove();

    /**
     * 插入操作
     *
     * @author 周恒
     * @date 20200421 11:19:50
     * @since v1.0
     */
    void insert();

    /**
     * 查询数据返回并删除数据
     *
     * @return 返回 list 描述此返回参数
     * @author 周恒
     * @date 20200421 11:22:54
     * @since v1.0
     */
    List<BaseSiteInfo> findAndRemove();

    /**
     * 同一个字段不能在一个criteria的where中当做条件两次，如果用到多次需要使用
     * orOperator 或 andOperator
     *
     * @return 返回 list 描述此返回参数
     * @author 周恒
     * @date 20200421 14:56:21
     * @since v1.0
     */
    List<GridData> operatorOrAnd();

}
